﻿using System;
using System.Text;
using System.Collections.Generic;
using System.Linq;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Altbrot.Yawr.Buslogic;
using System.Reflection;
using Altbrot.Yawr.ShoutCast;
using Altbrot.Yawr.Entities;

namespace UnitTest
{
    /// <summary>
    /// Summary description for UnitTest1
    /// </summary>
    [TestClass]
    public class UnitTest1
    {
        public UnitTest1()
        {
            //
            // TODO: Add constructor logic here
            //
        }

        private TestContext testContextInstance;

        /// <summary>
        ///Gets or sets the test context which provides
        ///information about and functionality for the current test run.
        ///</summary>
        public TestContext TestContext
        {
            get
            {
                return testContextInstance;
            }
            set
            {
                testContextInstance = value;
            }
        }

        #region Additional test attributes
        //
        // You can use the following additional attributes as you write your tests:
        //
        // Use ClassInitialize to run code before running the first test in the class
        // [ClassInitialize()]
        // public static void MyClassInitialize(TestContext testContext) { }
        //
        // Use ClassCleanup to run code after all tests in a class have run
        // [ClassCleanup()]
        // public static void MyClassCleanup() { }
        //
        // Use TestInitialize to run code before running each test 
        // [TestInitialize()]
        // public void MyTestInitialize() { }
        //
        // Use TestCleanup to run code after each test has run
        // [TestCleanup()]
        // public void MyTestCleanup() { }
        //
        #endregion

        [TestMethod]
        public void TestMethod1()
        {
            string _baseUri = "http://www.shoutcast.com/sbin/newxml.phtml?rss=1";
            string _tmpFilePath = "tunein-station.pls";
            //string connectionString = @"C:\Users\altbrot\work\carpc\ModuleDevelopment\Yawr\Altbrot.Yawr.Plugin\Yawr\Database\FeedItemDb.sdf";
            //string connectionString = @"C:\Projects\Yawr\Altbrot.Yawr.Plugin\Yawr\Database\FeedItemDb.sdf";
            //string connectionString = @"C:\Users\keiderf.CSS\Desktop\Altbrot.Yawr\Altbrot.Yawr.Plugin\Yawr\Database\FeedItemDb.sdf";
            string connectionString = @"C:\Users\altbrot\work\carpc\ModuleDevelopment\Yawr\Altbrot.Yawr.Plugin\Database\FeedItemDb.sdf";

            string filePath = System.IO.Path.Combine(
                System.IO.Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), _tmpFilePath);
            Uri baseUri = new Uri(_baseUri);

            ShoutCastManager scm = new ShoutCastManager(baseUri, filePath, new OnlineBuslogicManager());            

            IBuslogicManager man = new DatabaseBuslogicManager(connectionString);
            ShoutCastManager scmDb = new ShoutCastManager(baseUri, filePath, man);

            List<FeedItem> baseStepList = scmDb.GetBaseStep(5000);

            foreach (FeedItem genre in baseStepList)
            {
                scm.SelectedFeedItem = genre;

                List<FeedItem> stationList = new List<FeedItem>();

                if (scm.GetNextStep(out stationList))
                {
                    man.UpdateStationList(stationList, genre.Title, _tmpFilePath, null);                    
                }

                List<FeedItem> gl = new List<FeedItem>();
                gl.Add(genre);
                man.UpdateGenreList(gl);

                scm = new ShoutCastManager(baseUri, filePath, new OnlineBuslogicManager());
            }
        }
    }
}
